import os
import re
import openpyxl
from openpyxl import load_workbook
import sys
import io

# 设置输出编码为UTF-8，解决Windows终端中文乱码问题
if sys.platform == 'win32':
    sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

# 自定义翻译映射表 - 优先使用这些翻译
CUSTOM_TRANSLATIONS = {
    '版本记录': 'Revision_History',
    '产品名称：': 'Product:',
    '产品型号：': 'Short Name:',
    '日期：': 'Date:',
    '初版': 'First Version',
    'BOM版本': 'BOM Version:',
    '版本变更记录': 'Revision History',
    '版本': 'Version',
    '日期': 'Date',
    '变更内容': 'Changes',
    '变更前': 'Change before',
    '变更后': 'Change after',
    '产品型号': 'Short Name',
    '产品名称': 'Product Name',
    '版本号': 'Version',
    '释放/更新日期': 'Release/Update Date',
    '序号': 'Item #',
    '位           号': 'Designator',
    '用量': 'Quantity',
    '元 件 名 称': 'Description',
    '参     数': 'Value',
    '封       装': 'Footprint',
    '物料编码': 'Part Number',
    '备注': 'Comment',
    '贴片电容': 'MLCC',
    '电池触点弹片，镀金，正极': 'Battery contact,gold plated,plus',
    '电池触点弹片，镀金，负极': 'Battery contact,gold plated,minus',
    '肖特基二极管': 'SBD',
    '发光二极管RGB三色': 'LED RGB',
    '发光二极管 White白光': 'LED White',
    'FPC连接器，下接，间距0.5mm，max高1.0mm': 'FPC connector,bottom contact,pitch 0.5mm，max height 1.0mm',
    '层叠电感': 'SMD Inductor',
    '功率电感': 'Power Inductor',
    '贴片无源晶体': 'SMD Crystal',
    '贴片电阻': 'SMD Resistor',
    '寸': '"'
}

# 需要删除的关键词
TO_REMOVE = ['(三星)', '(村田)', '(国巨)', '(顺络)', '(太诱)', '(惠伦)', '(长晶)', '(风华)', '(奇力新)']

class ExcelTranslator:
    def __init__(self):
        # 不使用在线翻译API，只使用自定义翻译映射表
        pass
        
    def has_chinese(self, text):
        """检查文本是否包含中文字符"""
        return bool(re.search(r'[\u4e00-\u9fff]', str(text)))
        
    def translate_text(self, text):
        """只使用自定义翻译映射表进行翻译"""
        if not text or not isinstance(text, str):
            return text
            
        # 先尝试完全匹配
        if text in CUSTOM_TRANSLATIONS:
            return CUSTOM_TRANSLATIONS[text]
            
        # 检查是否包含需要删除的关键词
        for item in TO_REMOVE:
            if item in text:
                text = text.replace(item, '')
                
        # 尝试部分匹配和替换
        translated_text = text
        for key, value in CUSTOM_TRANSLATIONS.items():
            if key in translated_text:
                translated_text = translated_text.replace(key, value)
                
        return translated_text
        
    def process_excel_file(self, file_path, output_dir):
        """处理单个Excel文件"""
        try:
            # 加载工作簿
            if file_path.endswith('.xlsx'):
                workbook = load_workbook(filename=file_path)
            elif file_path.endswith('.xls'):
                # 对于.xls格式，需要特殊处理，这里假设使用openpyxl可以处理
                workbook = load_workbook(filename=file_path)
            else:
                print(f"不支持的文件格式: {file_path}")
                return False
            
            # 翻译工作表名称
            # 先创建名称映射，避免在迭代过程中修改集合
            sheet_name_mapping = {}
            for sheet_name in workbook.sheetnames:
                new_name = self.translate_text(sheet_name)
                if new_name != sheet_name:
                    sheet_name_mapping[sheet_name] = new_name
            
            # 重命名工作表
            for old_name, new_name in sheet_name_mapping.items():
                # 直接重命名工作表，不创建新工作表或复制内容
                # 这可以确保所有工作表的内容和格式保持不变
                workbook[old_name].title = new_name
            
            # 处理工作表中的单元格内容
            for sheet_name in workbook.sheetnames:
                sheet = workbook[sheet_name]
                
                # 获取最大行数和列数
                max_row = sheet.max_row
                max_col = sheet.max_column
                
                # 遍历所有单元格
                for row in range(1, max_row + 1):
                    for col in range(1, max_col + 1):
                        cell = sheet.cell(row=row, column=col)
                        if cell.value:
                            original_value = cell.value
                            translated_value = self.translate_text(original_value)
                            if translated_value != original_value:
                                cell.value = translated_value
            
            # 保存翻译后的文件
            file_name = os.path.basename(file_path)
            output_path = os.path.join(output_dir, file_name)
            workbook.save(output_path)
            print(f"已处理文件: {file_name}")
            return True
            
        except Exception as e:
            print(f"处理文件错误 {file_path}: {e}")
            return False
            
    def batch_process(self, source_dir):
        """批量处理文件夹中的所有Excel文件"""
        # 创建输出目录
        output_dir = os.path.join(source_dir, 'transfer')
        if not os.path.exists(output_dir):
            os.makedirs(output_dir)
            
        # 获取所有Excel文件
        excel_files = []
        for file in os.listdir(source_dir):
            if file.endswith('.xlsx') or file.endswith('.xls'):
                excel_files.append(os.path.join(source_dir, file))
                
        if not excel_files:
            print(f"在目录 {source_dir} 中没有找到Excel文件")
            return
            
        print(f"找到 {len(excel_files)} 个Excel文件，开始处理...")
        
        # 处理每个文件
        success_count = 0
        for file_path in excel_files:
            if self.process_excel_file(file_path, output_dir):
                success_count += 1
                
        print(f"处理完成! 成功: {success_count}, 失败: {len(excel_files) - success_count}")

if __name__ == "__main__":
    # 使用当前工作目录作为源目录
    # 这样打包成exe后，程序会在用户运行程序的目录中查找Excel文件
    source_dir = os.getcwd()
    
    # 创建翻译器实例并开始批量处理
    translator = ExcelTranslator()
    translator.batch_process(source_dir)